package org.springsecuritylearn.repository.jvm.lession1.demo1;

public class Demo2 {

	
	
	
	public static void main(String[] args) {
		Demo2 demo2=new Demo2();
		demo2.localvarGc3();
	}

	//无法回收
	public void localvarGc1() {
		byte[] a=new byte[6*1024*1024];
		System.gc();
	}
	
	public void localGc2() {
		byte[] a=new byte[6*1024*1024];
		a=null;
		System.gc();//回收掉byte数组
	}

	public void localvarGc3() {
		{
			byte[] a=new byte[6*1024*1024];
		}
		System.gc();
		//因为变量a还存在于局部变量表中，并且也指向这块byte数组，故byte数组依然无法被回收
	}
	public void localvarGc4() {
		{
			byte[] a=new byte[6*1024*1024];
		}
		int c=10;
		System.gc();
		//变量c复用了变量a的字，由于变量a此时被销毁，故垃圾回收器可以顺利回收byte数组。
	}
	
	public void localvarGc5() {
		localvarGc1();
		System.gc();
		// 在localvarGc1方法返回后，他的帧栈被销毁，自然也包含了帧栈中的所有局部变量，故bye数组失去了引用，被回收掉
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
